package com.sojson.util.encrypt.bothway.imparity.sm2;

import com.sojson.util.encrypt.bothway.imparity.bean.CustomKeyPair;

/**
 * Sms2双向非对称加解密工具类
 * 
 * @author liu
 * @date 2020-09-04
 */
public interface ISm2Util {

    /**
     * 加密
     * 
     * @param data      内容
     * @param publicKey 公钥
     * @return
     * @throws Exception 
     */
    String encrypt(String data, String publicKey) throws Exception;

    /**
     * 加密
     * 
     * @param data      内容
     * @param publicKey 公钥
     * @return
     * @throws Exception 
     */
    byte[] encrypt(byte[] data, String publicKey) throws Exception;

    /**
     * 加密
     * 
     * @param data      内容
     * @param publicKey 公钥
     * @return
     * @throws Exception 
     */
    byte[] encryptToByte(String data, String publicKey) throws Exception;

    /**
     * 加密
     * 
     * @param data      内容
     * @param publicKey 公钥
     * @return
     * @throws Exception 
     */
    String encryptToStr(byte[] data, String publicKey) throws Exception;

    /**
     * 解密
     * 
     * @param data          内容
     * @param privateKey    私钥
     * @return
     * @throws Exception 
     */
    String decrypt(String data, String privateKey) throws Exception;

    /**
     * 解密
     * 
     * @param data          内容
     * @param privateKey    私钥
     * @return
     * @throws Exception 
     */
    byte[] decrypt(byte[] data, String privateKey) throws Exception;

    /**
     * 解密
     * 
     * @param data          内容
     * @param privateKey    私钥
     * @return
     * @throws Exception 
     */
    byte[] decryptToByte(String data, String privateKey) throws Exception;

    /**
     * 解密
     * 
     * @param data          内容
     * @param privateKey    私钥
     * @return
     * @throws Exception 
     */
    String decryptToStr(byte[] data, String privateKey) throws Exception;

    /**
     * 获得公私钥对
     * 
     * @return
     * @throws Exception
     */
    CustomKeyPair generateKeyPair() throws Exception;

}